#include "menu.h"
#include <SDL/SDL_ttf.h>
#include <assert.h>

void EcranAccueil(IMAGE *images)
{
    TTF_Font *police1 = NULL;

    SDL_Event event;
    SDL_Rect decoupe,decoupePonctuation;
    SDL_Surface *surf, *iron, *ennemis, *ponctuation, *titre1, *titre2, *titre3;
    int etat = 1;
    int done = 1;
    int compteur = 0;
    int positionX,positionY,positionXEnnemi,positionYEnnemi;
    int positionXTitre1,positionYTitre1,positionXTitre2,positionYTitre2,positionXTitre3,positionYTitre3;
    SDL_Color couleur1 = {0,0,255};
    SDL_Color couleur2 = {255,255,255};
    SDL_Color couleur3 = {255,0,0};
    positionX = 300; positionY = 420;
    positionXEnnemi = 640; positionYEnnemi = 420;
    positionXTitre1 = 640 ; positionYTitre1 = 50;
    positionXTitre2 = -600 ; positionYTitre2 = 140;
    positionXTitre3 = 640 ; positionYTitre3 = 230;

    surf = SDL_LoadBMP("Images/ecranAccueil.bmp");
    iron = SDL_LoadBMP("Images/iron.bmp");
    ennemis = SDL_LoadBMP("Images/ennemis.bmp");
    ponctuation = SDL_LoadBMP("Images/point.bmp");


    police1 = TTF_OpenFont("JustAnotherFont.TTF",60);

    titre1 = TTF_RenderText_Blended(police1, "flatiron", couleur1);
    assert(titre1);
    titre2 = TTF_RenderText_Blended(police1, "vs", couleur2);
    assert(titre2);
    titre3 = TTF_RenderText_Blended(police1, "evil snows", couleur3);
    assert(titre3);

    SDL_SetColorKey(surf,SDL_SRCCOLORKEY,SDL_MapRGB(GetEcranAffichage(images)->format,0,255,0));
    SDL_SetColorKey(iron,SDL_SRCCOLORKEY,SDL_MapRGB(GetEcranAffichage(images)->format,0,255,0));
    SDL_SetColorKey(ennemis,SDL_SRCCOLORKEY,SDL_MapRGB(GetEcranAffichage(images)->format,0,255,0));
    SDL_SetColorKey(ponctuation,SDL_SRCCOLORKEY,SDL_MapRGB(GetEcranAffichage(images)->format,0,255,0));

    decoupe.x = 120;
    decoupe.y = 0;
    decoupe.h = 20;
    decoupe.w = 40;
    decoupePonctuation.x = decoupePonctuation.y = 0;
    decoupePonctuation.h = decoupePonctuation.w = 20;

    MettreSurface(surf,GetEcranAffichage(images),0,0,NULL);
    MettreSurface(iron,GetEcranAffichage(images),300,420,&decoupe);
    SDL_Flip(GetEcranAffichage(images));

	while (done)
	{
		while (SDL_PollEvent(&event))
		{
			if(event.type == SDL_QUIT)
			{
				SDL_Quit();
			}
			else if(event.type == SDL_KEYDOWN)
			{
			    done = 0;
			}
		}

        switch(etat)
        {
            case 1 :
                if(compteur > 100)
                {
                    positionXEnnemi = positionXEnnemi - 6;
                }

                if(positionXEnnemi < 460)
                {
                    positionXEnnemi = 460;
                    etat = 2;
                    compteur = 0;
                    decoupe.x = 0;
                }
                break;

            case 2 :
                if(compteur > 55)
                {
                    positionX = positionX - 8;
                    decoupe.y = 20;
                    decoupe.x = 80;
                }

                if(positionX < 50)
                {
                    positionX = 50;
                    etat = 3;
                    compteur = 0;
                    decoupe.x = 0;
                }
                break;

            case 3 :
                if(compteur > 65)
                {
                    positionX = positionX + 8;
                    decoupe.y = 0;
                    decoupe.x = 80;
                }

                if(positionX > 280 && positionX < 320)
                {
                    positionY = positionY - 14;
                }

                if(positionX > 320)
                {
                    positionX = 320;
                    etat = 4;
                    compteur = 0;
                    decoupe.x = 0;
                }
                break;

            case 4 :
                positionXTitre1 = positionXTitre1 - 60;

                if(positionXTitre1 < 180)
                {
                    positionXTitre1 = 180;
                    etat = 5;
                }
                break;

            case 5 :
                positionXTitre2 = positionXTitre2 + 60;

                if(positionXTitre2 > 280)
                {
                    positionXTitre2 = 280;
                    etat = 6;
                }
                break;

            case 6 :
                positionXTitre3 = positionXTitre3 - 60;

                if(etat ==6 && positionXTitre3 < 110)
                {
                    positionXTitre3 = 110;
                    etat = 7;
                }
                break;

            default :
                break;
        }




		MettreSurface(surf,GetEcranAffichage(images),0,0,NULL);
		MettreSurface(iron,GetEcranAffichage(images),positionX,positionY,&decoupe);
		MettreSurface(ennemis,GetEcranAffichage(images),positionXEnnemi,positionYEnnemi,NULL);

		MettreSurface(titre1,GetEcranAffichage(images),positionXTitre1,positionYTitre1,NULL);
		MettreSurface(titre2,GetEcranAffichage(images),positionXTitre2,positionYTitre2,NULL);
		MettreSurface(titre3,GetEcranAffichage(images),positionXTitre3,positionYTitre3,NULL);

        if(compteur > 30 && compteur < 120 && etat == 1)
        {
            MettreSurface(ponctuation,GetEcranAffichage(images),335,400,&decoupePonctuation);
        }

        if(compteur > 5 && compteur < 45 && etat == 2)
        {
            decoupePonctuation.x = 20;
            MettreSurface(ponctuation,GetEcranAffichage(images),335,400,&decoupePonctuation);
        }

        if(compteur > 5 && compteur < 50 && etat == 3)
        {
            decoupePonctuation.x = 40;
            MettreSurface(ponctuation,GetEcranAffichage(images),35,400,&decoupePonctuation);
        }

        SDL_Flip(GetEcranAffichage(images));

        compteur++;
        SDL_Delay(30);
	}

    SDL_FreeSurface(surf);
    SDL_FreeSurface(iron);
    SDL_FreeSurface(ennemis);
    SDL_FreeSurface(ponctuation);
    SDL_FreeSurface(titre1);
    SDL_FreeSurface(titre2);
    SDL_FreeSurface(titre3);

    TTF_CloseFont(police1);
}

int ChoixMenu(IMAGE *images)
{
    SDL_Event ev;   

    TTF_Font *police1 = NULL;
    TTF_Font *police2 = NULL;
    TTF_Font *police3 = NULL;
	
    int done = 1; 

    SDL_Color couleur1 = {0,0,0};
    SDL_Color couleur2 = {0,255,0};
    SDL_Color couleur3 = {0,0,255};

    SDL_Surface *menu,*nouveau,*sauve,*n,*s,*surf = SDL_CreateRGBSurface(SDL_HWSURFACE,640,480,32,0,0,0,0);
    SDL_FillRect(surf, NULL, SDL_MapRGB(GetEcranAffichage(images)->format, 255,255,255));

    police1 = TTF_OpenFont("JustAnotherFont.TTF",80);
    police2 = TTF_OpenFont("Rom_Fatl_Srif.TTF",40);
    police3 = TTF_OpenFont("JustAnotherFont.TTF",50);

    menu = TTF_RenderText_Blended(police1, "MENU", couleur1);
    assert(menu);
    nouveau = TTF_RenderText_Blended(police2, "nouvelle partie", couleur3);
    assert(nouveau);
    sauve = TTF_RenderText_Blended(police2, "charger partie", couleur3);
    assert(sauve);
    n = TTF_RenderText_Blended(police3, "N", couleur2);
    assert(n);
    s = TTF_RenderText_Blended(police3, "S", couleur2);
    assert(s);

    while(done)
    {
            SDL_WaitEvent(&ev);

            if(ev.type == SDL_KEYDOWN)
            {
                if(ev.key.keysym.sym == SDLK_n)
                {
                    SDL_FreeSurface(surf);
                    SDL_FreeSurface(menu);
                    SDL_FreeSurface(nouveau);
                    SDL_FreeSurface(sauve);
                    SDL_FreeSurface(n);
                    SDL_FreeSurface(s);

                    TTF_CloseFont(police1);
                    TTF_CloseFont(police2);
                    TTF_CloseFont(police3);

                    return 0;
                }
                else if(ev.key.keysym.sym == SDLK_s)
                {
                    SDL_FreeSurface(surf);
                    SDL_FreeSurface(menu);
                    SDL_FreeSurface(nouveau);
                    SDL_FreeSurface(sauve);
                    SDL_FreeSurface(n);
                    SDL_FreeSurface(s);

                    TTF_CloseFont(police1);
                    TTF_CloseFont(police2);
                    TTF_CloseFont(police3);
                    return 1;
                }
            }
            MettreSurface(surf,GetEcranAffichage(images),0,0,NULL);
            MettreSurface(menu,GetEcranAffichage(images),180,30,NULL);
            MettreSurface(nouveau,GetEcranAffichage(images),40,240,NULL);
            MettreSurface(sauve,GetEcranAffichage(images),395,240,NULL);
            MettreSurface(n,GetEcranAffichage(images),120,300,NULL);
            MettreSurface(s,GetEcranAffichage(images),480,300,NULL);
            SDL_Flip(GetEcranAffichage(images));

    }

    return 0;
}

void EntreNiveau(IMAGE *images, const char *nomNiveau, int vieIron)
{
    SDL_Rect decoupe;
    SDL_Surface *texte;
    TTF_Font *police = NULL;
    int i, Xvie = 300;
    SDL_Color couleur = {255,255,255};
    SDL_Surface *noir = SDL_CreateRGBSurface(SDL_HWSURFACE, 640, 480, 32, 0, 0, 0, 0);
    assert(noir);
    decoupe.h = 20; decoupe.w = 40;
    decoupe.x = decoupe.y = 0;
    SDL_FillRect(noir, NULL, SDL_MapRGB(GetEcranAffichage(images)->format, 0,0,0));
    MettreSurface(noir,GetEcranAffichage(images),0,0,NULL);

    for(i=0 ; i<vieIron ; i++)
    {
        MettreSurface(images->iron,images->ecran,Xvie,280,&decoupe);
        Xvie = Xvie + 6;
    }


    police = TTF_OpenFont("Rom_Fatl_Srif.TTF",60);
    assert(police);

    texte = TTF_RenderText_Blended(police, nomNiveau, couleur);
    assert(texte);

    MettreSurface(texte,GetEcranAffichage(images),250,150,NULL);
    SDL_Flip(GetEcranAffichage(images));

    SDL_Delay(2000);

    TTF_CloseFont(police);
    SDL_FreeSurface(texte);
    SDL_FreeSurface(noir);
}
